from flask_restx import fields


class CustomDate(fields.DateTime):
    '''
    自定义CustomDate,原有的fileds.DateTime序列化后
    只支持 rfc822,ios8601 格式，新增 strftime 格式
    strftime格式下支持 format 参数，默认为 '%Y-%m-%d %H:%M:%S'
    '''

    def __init__(self, dt_format='rfc822', format=None, **kwargs):
        super().__init__(**kwargs)
        self.dt_format = dt_format

    def format(self, value):
        if self.dt_format in ('rfc822', 'iso8601'):
            return super().format(value)
        elif self.dt_format == 'str_time':
            if isinstance(value, str):
                return value
            # print(value)
            return value.strftime('%Y-%m-%d %H:%M:%S.%f')
            # return value.strftime('%Y-%m-%d %H:%M:%S')

        else:
            raise Exception('Unsupported date format %s' % self.dt_format)


# from flask_restx import fields
# from datetime import datetime
#
#
# class CustomDate(fields.DateTime):
#     """
#     自定义日期字段，支持 rfc822、iso8601 格式，以及自定义的 strftime 格式。
#     默认格式为 '%Y-%m-%d %H:%M:%S.%f'。
#     """
#
#     def __init__(self, dt_format='rfc822', format='%Y-%m-%d %H:%M:%S.%f', **kwargs):
#         super().__init__(**kwargs)
#         self.dt_format = dt_format
#         self.format = format  # 支持用户自定义格式
#
#     def format(self, value):
#         if self.dt_format in ('rfc822', 'iso8601'):
#             return super().format(value)
#         elif self.dt_format == 'str_time':
#             if isinstance(value, str):
#                 return value
#             elif isinstance(value, datetime):
#                 return value.strftime(self.format)
#             else:
#                 raise ValueError(f"Invalid value type for CustomDate: {type(value)}")
#         else:
#             raise ValueError(f"Unsupported date format: {self.dt_format}")
